<template>
  <div>
    <form class="card comment-form">
      <div class="card-block">
        <textarea
          class="form-control"
          v-model="newComment"
          placeholder="Write a comment..."
          rows="3"
        ></textarea>
      </div>
      <div class="card-footer">
        <img :src="user.image" class="comment-author-img" />
        <button
          class="btn btn-sm btn-primary"
          :class="{ disabled: postDisabled }"
          @click="onPostComment"
          :disabled="postDisabled"
        >Post Comment</button>
      </div>
    </form>

    <div class="card" v-for="comment in comments" :key="comment.id">
      <div class="card-block">
        <p class="card-text">{{ comment.body }}</p>
      </div>
      <div class="card-footer">
        <nuxt-link
          class="comment-author"
          :to="{ name: 'profile', params: { username: comment.author.username } }"
        >
          <img :src="comment.author.image" class="comment-author-img" />
        </nuxt-link>&nbsp;
        <nuxt-link
          class="comment-author"
          :to="{ name: 'profile', params: { username: comment.author.username } }"
        >{{ comment.author.username }}</nuxt-link>
        <span class="date-posted">{{ comment.createdAt | date('MMM DD, YYYY') }}</span>
      </div>
    </div>
  </div>
</template>

<script>
import { getComments, addComments } from "@/api/article";
import { mapState } from "vuex";

export default {
  props: {
    article: {
      type: Object,
      required: true,
    },
  },
  data() {
    return {
      comments: [],
      newComment: "",
      postDisabled: false,
    };
  },
  computed: {
    ...mapState(["user"]),
  },
  mounted() {
    this.initData();
  },
  methods: {
    async initData() {
      const { data } = await getComments(this.article.slug);
      this.comments = data.comments;
    },
    async onPostComment() {
      if (!this.newComment) { return false }
      this.postDisabled = true;
      await addComments(this.article.slug, this.newComment);
      this.postDisabled = false;
      this.newComment = '';
      this.initData();
    },
  },
};
</script>

<style>
</style>